<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>Обмен служебной информацией</title>
<link href="ice.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<p><b>Distributed Network Messaging Protocol</b></p>

<p>Коммерческое использование только с разрешения автора.<br>
При использовании необходимо явно указывать ссылку на источник.</p>

<p>Sergey Bodrov, 2014-07-22</p>

<p>Сервис INFO предназначен для обмена служебной информацией внутри сети. Используется для обнаружения новых пользователей, построения карты сегмента, диагностики. Возможные виды сообщений:<br>
<b>запрос</b> - точка-отправитель запрашивает информацию у точки-получателя и ожидает ответ<br>
<b>ответ</b> - ответ на запрос<br>
<b>уведомление</b> - точка-отправитель передает информацию точке-получателю без ожидания ответа<br>
</p>

<p><b>Каталог пользователей</b></p>

<p>Каталог пользователей есть на каждом узле. Каталог пользователей позволяет получить информацию об известных узлу пользователях, позволяет находить пользователей в сети, изменять информацию о пользователе.</p>

<p>
Данные пользователя (клиента) узла хранятся на узле в виде паспорта, содержащего все сведения о пользователе, его ключ, непринятые сообщения, подписки, итд.. Подробнее в разделе <a href="passport.htm">Паспорт</a><br>
Данные пользователей других узлов и сервисов хранятся в виде карточек, содержащих только основные сведения о пользователе.
</p>

<p>
В каталоге пользователей имеются:<br>
<li>список паспортов пользователей узла
<li>список карточек абонентов имеющихся на узле сервисов
<li>список карточек прочих пользователей, по которым были запросы данных
</p>

<p>
Карточка пользователя содержит:<br>
<li>GUID - уникальный идентификационный номер клиента
<li>краткое имя
<li>основной адрес
<li>состояние (неизвестно, подключен, отключен, занят, итд..)
<li>рейтинг
</p>

<p><b>Формат сообщений DNMP</b></p>

<p>
<u>Обязательные реквизиты для всех сообщений</u><br>
Тип: <b>INFO</b><br>
Параметры:<br>
<b>timestamp</b> - дата и время создания сообщения<br>
<b>author_name</b> - имя автора сообщения<br>
<b>author_guid</b> - GUID автора сообщения<br>
<b>target_name</b> - имя получателя сообщения<br>
<b>target_guid</b> - GUID получателя сообщения<br>
<b>cmd</b> - команда<br>
</p>

<p><b>Команды:</b></p>
[S] - Cервис на узле<br>
[C] - Клиент<br>
[SС] - Сервис на узле и клиент<br>


<p><b>Список линков узла</b></p>

<p>
<b>LLRQ</b><br>
[S] LinkList Request - запрос списка линков узла. Используется для построения карты сегмента сети.<br>
<br>
Параметры:<br>
<b>cmd=LLRQ</b><br>
<br>
Данные:<br>
нет<br>
</p>

<p>
<b>LLST</b><br>
[S] Link List - список линков узла<br>
<br>
Параметры:<br>
<b>cmd=LLST</b><br>
<b>addr</b> - адрес отвечающего узла<br>
<b>name</b> - название отвечающего узла<br>
<b>format</b> - формат сериализованных данных (CSV, XML, JSON, BENC)<br>
<br>
Данные:<br>
сериализованные данные списка линков<br>
</p>


<p><b>Список узлов (нодлист)</b></p>

<p>
<b>NLRQ</b><br>
[S] NodeList Request - запрос нодлиста узла. Используется для поиска новых линков.<br>
<br>
Параметры:<br>
<b>cmd=NLRQ</b><br>
<br>
Данные:<br>
нет<br>
</p>

<b>NLST</b><br>
Link List - список узлов (нодлист) узла<br>
<br>
Параметры:<br>
<b>cmd=NLST</b><br>
<b>addr</b> - адрес отвечающего узла<br>
<b>name</b> - название отвечающего узла<br>
<b>count</b> - число узлов в списке<br>
<b>format</b> - формат сериализованных данных (CSV, XML, JSON, BENC)<br>
<br>
Данные:<br>
сериализованные данные списка узлов<br>
</p>


<p><b>Список точек (поинтлист)</b></p>

<p>
<b>PLRQ</b><br>
[S] PointList Request - запрос поинтлиста узла.<br>
<br>
Параметры:<br>
<b>cmd=PLRQ</b><br>
<br>
Данные:<br>
нет<br>
</p>

<p>
<b>PLST</b><br>
Point List - список точек (поинтлист) узла<br>
<br>
Параметры:<br>
<b>cmd=PLST</b><br>
<b>addr</b> - адрес отвечающего узла<br>
<b>name</b> - название отвечающего узла<br>
<b>format</b> - формат сериализованных данных (CSV, XML, JSON, BENC)<br>
<br>
Данные:<br>
сериализованные данные поинтлиста<br>
</p>


<p><b>Список контактов</b></p>

<p>
<b>СLRQ</b><br>
[S] ContactList Request - запрос контактов по условию. Сервер возвращает по адресу отправителя список контактов, подходящих под условия
запроса. Если указана глубина запроса, то значение глубины уменьшается на единицу и запрос передается всем линкам-узлам кроме 
перечисленных в seen-by.<br>
<br>
Параметры:<br>
<b>cmd=CLRQ</b><br>
<b>name</b> - строка, часть имени контакта<br>
<b>depth</b> - число, глубина рекурсии поиска. Меньше 1 - запрос далее не передается.<br>
<br>
Данные:<br>
нет<br>
</p>

<p>
<b>СLST</b><br>
Contact List - список контактов (в ответ на запрос)<br>
<br>
Параметры:<br>
<b>cmd=CLST</b><br>
<b>name</b> - имя для отбора контаков из запроса<br>
<b>format</b> - формат сериализованных данных (CSV, XML, JSON, BENC)<br>
<br>
Данные:<br>
сериализованные данные списка контактов<br>
</p>


<p><b>Информация о контакте</b></p>

<p>
<b>GINF</b><br>
[SC] Get Info - получить публичную информацию об адресе или имени<br>
<br>
Параметры:<br>
<b>cmd=GINF</b><br>
<b>addr</b> - адрес точки, информацию о которой запрашиваем<br>
<b>name</b> - название точки, используется если адрес неизвестен<br>
<br>
Данные:<br>
нет<br>
</p>

<p>
<b>CINF</b><br>
Contact Info - информация контакта<br>
<br>
Параметры:<br>
<b>cmd=СINF</b><br>
<b>addr</b> - адрес контакта<br>
<b>format</b> - формат сериализованных данных (CSV, XML, JSON, BENC)<br>
<br>
Данные:<br>
сериализованные данные<br>
</p>

<p>
<b>NINF</b><br>
Node Info - информация узла<br>
<br>
Параметры:<br>
<b>cmd=NINF</b><br>
<b>addr</b> - адрес узла<br>
<b>state</b> - состояние узла по отношению к отправителю (on / off)<br>
<b>name</b> - название узла<br>
<b>owner</b> - информация о владельце узла<br>
<b>ip_addr</b> - IP-адрес узла<br>
<b>phone_no</b> - номер телефона узла<br>
<b>rating</b> - рейтинг узла<br>
<b>avail</b> - средний рейтинг доступности узла<br>
<b>speed</b> - средний рейтинг скорости узла<br>
<br>
Данные:<br>
сериализованные шифрованые данные (ключ узла, итд..)<br>
</p>

<p>
<b>PASSPORT</b><br>
Паспорт пользователя<br>
<br>
Параметры:<br>
<b>serialization</b> - варианты: JSON, XML, YAML<br> 
<b>compression</b> - варианты: ZIP, NONE, GZIP, 7ZIP, RAR<br>
<b>encription</b> - варианты: RC4, SEAL, AES, XOR, NONE<br>
<br>
Данные:<br>
сериализованный пакованный шифрованный паспорт<br>
</p>


<p><b>Уведомления, отправляются без ожидания ответа:</b></p>

<p>
<b>ERRR</b><br>
Error Report - сообщение об ошибке<br>
<br>
Параметры:<br>
<b>cmd=ERRR</b><br>
<br>
Данные:<br>
Текст сообщения об ошибке<br>
</p>

<p>
<b>UPDI</b><br>
Update Info - обновление информации о точке<br>
<br>
Параметры:<br>
<b>cmd=UPDI</b><br>
<b>addr</b> - адрес точки<br>
<b>name</b> - название точки<br>
<b>owner</b> - информация о владельце<br>
<b>ip_addr</b> - IP-адрес<br>
<b>phone_no</b> - номер телефона<br>
<b>rating</b> - рейтинг<br>
<br>
Данные:<br>
сериализованные данные<br>
</p>


</body>
</html>